1 矩阵操作1.1 矩阵的输入1.1.1 通过模板1.1.2 一般矩阵1.1.3 特殊矩阵1.2 基础操作1.2.1 常用函数1.2.2 提取元素1.2.3 提取范围1.3 基础运算1.3.1 逐元素运算1.3.2 矩阵的运算1.3.3 其他的函数2 线性方程组2.1 线性求解2.1.1 LinearSolve
2.1.2 精确和符号矩阵2.1.3 近似解数值矩阵2.2 矩阵分解2.2.1 LU 分解2.2.2 Cholesky 分解
更详细的用法参考官网,这里不再列出;本章笔记的主要目的是
面板 - 数学助手(或书写助手) - 排版 - 矩阵模板.
1matA = {{1, -2, 2}, {-2, -2, 4}, {2, 4, -2}}; (* 创建矩阵 *)
2matB = Table[i + j, {i, 3}, {j, 3}] (* 利用 Table 创建 *)
3matA = Array[a, {3, 2}] (* 符号矩阵 *)
xxxxxxxxxx
51ConstantArray[a, {m, n}] (* 常量矩阵, 每个元素都是数值 a *)
2IdentityMatrix[n] (* 单位矩阵 *)
3DiagonalMatrix[list, k] (* 第 k 对角线为 list 的矩阵 *)
4HilbertMatrix[n] (* 希尔伯特矩阵 *)
5SparseArray (* 稀疏矩阵 *)
x1A // MatrixForm (* 矩阵形式 *)
2
3Length[A] (* 矩阵的行数 *)
4Length[A[[1]]] (* 矩阵的列数 *)
5
6MatrixQ[A] (* 判断是否为矩阵 *)
7DiagonalMatrixQ[A] (* 对角矩阵 *)
8UpperTriangularMatrixQ[A] (* 上三角矩阵 *)
9SymmetricMatrixQ[A] (* 对称矩阵 *)
10PositiveDefiniteMatrixQ[A] (* 正定矩阵 *)
11
12AbsoluteTiming[] (* 内部表达式的运行时间 *)
提取元素 | 操作 | 说明 |
---|---|---|
矩阵元素 | m[[ i, j ]] | 第 i, j 个元素 |
m[[ i, j ]] = a | 重新设置元素 { i,j } 为 a | |
m[[i]][[j]] | 第 i, j 个元素 | |
矩阵的行 | m[[ i ]] | 第 i 行 |
m[[ i ]] = a | 重新设置第 i 行的所有元素为 a | |
m[[ i ]] = {a1, a2, …} | 重新设置第 i 行的各个元素为 {a1,a2,…} | |
矩阵的列 | m[[ All, j ]] | 第 j 列 |
m[[ All, j ]] = a | 重新设置第 j 列的所有元素为 a | |
m[[ All, j ]] = {a1, a2, …} | 重新设置第 j 列的各个元素为 {a1,a2,…} |
提取范围 | 操作 | 说明 |
---|---|---|
双分号 | m[[i0 ;; i1]] | 第 i0 行到第 i1 行的元素 |
m[[i0;;i1;;k]] | 步长为 k | |
m[[i0 ;;]] | 第 i0 行到最后一行的元素 | |
m[[;; i1]] | 第一行到第 i1 行的元素 | |
m[[i0;;i1, j0;;j1]] | 第 i0 行到第 i1 行,第 j0 列到第 j1 列的子矩阵 | |
列表下标 | m[[{i1, i0...}]] | 交换顺序为 i1、i0... |
以 A = {{1, 2}, {3, 4}}
为例,
加法
xxxxxxxxxx
41Plus[A, B]
2A + B (* 矩阵加法, 对应元素相加 *)
3A + {1, 2} (* 前两行元素分别加 1、2 *)
4A + 1 (* 所有元素 + 1 *)
减法
xxxxxxxxxx
41Subtract[A, B]
2A - B
3A - {1, 2}
4A - 1
乘法
xxxxxxxxxx
41Times[A, B]
2A * B (* 逐元素相乘 *)
3A * {1, 2} (* 第一行乘 1, 第二行乘 2 *)
4A * 3 (* 所有元素乘 3 *)
除法
xxxxxxxxxx
41Divide[A, B] (* 逐元素相减 *)
2A / B
3A / {1, 2}
4A / 3
次方
xxxxxxxxxx
41Power[A, 2]
2A ^ B
3A ^ {1, 2}
4A ^ -1
点乘(矩阵乘法)
xxxxxxxxxx
51Dot[A, B]
2A . B (* 矩阵乘法 *)
3A . {1, 2} (* 矩阵乘向量 *)
4A . 3 (* 错误的写法, 这相当于 A * 0.3 *)
5{1, 2} . {1, 2} (* 点乘 *)
直积(Kronecker 积):KroneckerProduct[A, B]
求逆:Inverse[A]
转置:Transpose[A]
共轭:Conjugate[A]
共轭转置:ConjugateTranspose[A]
次幂:MatrixPower[A, n]
叉积:Cross[v1, v2]
行列式:Det[A]
迹:Tr[A]
秩:MatrixRank[A]
求和
xxxxxxxxxx
31Total[A] (* 按列求和, 所有行相加, 即 Total[A, 1] *)
2Total[A, 2] (* 第一维求和后第二维求和, 即所有元素之和 *)
3Total[A, {2}] (* 按行求和, 第二维求和, 即所有列相加 *)
范数
xxxxxxxxxx
131Norm[a] (* 实数的绝对值, 即 Abs[a] *)
2Norm[z] (* 复数的模长, 即 Abs[z] *)
3
4(* 向量的模长 *)
5Norm[v] (* 欧氏范数, 即 Sqrt[Conjugate[v].v], 即 Norm[v, 2] *)
6Norm[v, p] (* p-范数, 即 Total[Abs[v]^p]^(1/p) *)
7Norm[v, Inifity] (* 无穷范数, 即 Max[Abs[v]] *)
8
9(* 矩阵的范数 *)
10Norm[m] (* 谱范数, 即 Norm[m, 2] *)
11Norm[m, 1] (* 列范数, 即 Max[Total[m]] *)
12Norm[m, Infinity] (* 行范数, 即 Max[Total[A, {2}]] *)
13Norm[m, "Frobenius"] (* F 范数, 即 Sqrt[Tr[Transpose[A] . A]], 或 Sqrt[Total[A^2, 2]] *)
特征值
xxxxxxxxxx
41{lambda, xi} = Eigensystem[A]
2(* 验证 *)
3lambda[[1]]*xi[[1]] // Simplify
4A . xi[[1]] // Simplify
LinearSolve
使用方法
LinearSolve[m, b]
LinearSolve[m]
LinearSolve[m][b]
应用范围
数值矩阵
符号矩阵
稀疏矩阵
未确定的系统
矩阵可以不是方阵.
LinearSolve
返回一个可能的特解.
Solve
返回通解.
符号矩阵求解
xxxxxxxxxx
21LinearSolve[{{r, s}, {t, u}}, {y, z}] (* 符号求解 *)
2{{r, s}, {t, u}} . % == {y, z} // Simplify (* 验证 *)
数值矩阵求解
xxxxxxxxxx
31m = {{1, 2}, {3, 4}};
2b = {{5, 6}, {7, 8}}; (* b 可以有多行 *)
3LinearSolve[m, b] // MatrixForm
精确求解的方法 | 说明 |
---|---|
"CofactorExpansion" | 拉普拉斯 cofactor 展开 |
"DivisionFreeRowReduction" | 不可除行化简的 Bareiss 方法 |
"OneStepRowReduction" | 标准行化简 |
近似求解的方法 | 说明 |
---|---|
"Banded" | 带状矩阵求解器 |
"Cholesky" | 正定 Hermitian 矩阵的 Cholesky 方法 |
"Krylov" | 迭代 Krylov 稀疏求解器 |
"Multifrontal" | 直接稀疏 LU 分解 |
"Pardiso" | 并行直接稀疏求解器 |
求解算法
xxxxxxxxxx
111(* 以数值矩阵为例 *)
2matA = {{2, 1, 1}, {1, 3, 2}, {1, 2, 2}};
3arrb = {4, 6, 5};
4(* 选主元的 LU 分解 *)
5{lu, p, c} = LUDecomposition[matA];
6l = LowerTriangularize[lu, -1] + IdentityMatrix[Length[matA]];
7u = UpperTriangularize[lu];
8(* 求解线性方程组 *)
9x = Inverse[u] . Inverse[l] . arrb[[p]] // MatrixForm
10(* 重构原矩阵 *)
11l.u == m[[p]]
任意精度
xxxxxxxxxx
41MatrixForm /@ LUDecomposition[
2 RandomReal[5, {3, 3},
3 WorkingPrecision -> 10
4]
求解算法
xxxxxxxxxx
111(* 矩阵输入与验证 *)
2matA = {{2, 1}, {1, 2}}
3HermitianMatrixQ[matA] (* 实数可直接使用 SymmetricMatrixQ[matA] *)
4PositiveDefiniteMatrixQ[matA] (* 正定矩阵 *)
5
6(* Cholesky 分解 *)
7u = CholeskyDecomposition[matA] (* 分解 *)
8x = Inverse[u] . Inverse[Transpose[u]] . b (* 求解 *)
9(* 验证 *)
10ConjugateTranspose[u] . u == matA (* 重构 *)
11matA . x == b
任意精度
xxxxxxxxxx
51(* 任意精度 *)
2RandomVariate[WishartMatrixDistribution[
3 7, {{1, 1/2, 0}, {1/2, 2, -1/2}, {0, -1/2, 1}}],
4 WorkingPrecision -> 15
5]
参考资料
Mathematica 官网
Mathematica 语法
线代